/* 
 * File:   Caja.cpp
 * Author: 75.02 - Grupo 7, 2do cuatrimestre 2012.
 * 
 * Created on November 3, 2012, 5:53 PM
 */

#include "Caja.h"
using namespace TP::Juego::Arena::Utilidades;

Caja::Caja() : Utilidad("", new Rol (CAJA, CAJA)) {}

Caja::Caja(const string& pNombre) : Utilidad(pNombre, new Rol (CAJA, CAJA)) {}

Caja::~Caja() {}

string Caja::aXML(){

    TiXmlDocument* doc = new TiXmlDocument();
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc->LinkEndChild( decl );
    
    doc->LinkEndChild(this->aElementoXML());

    TiXmlPrinter printer;
    doc->Accept(&printer);
    return printer.CStr();    
}

string Caja::aXML(const string& pPath){

    TiXmlDocument* doc = new TiXmlDocument(pPath.c_str());
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc->LinkEndChild( decl );
    
    doc->LinkEndChild(this->aElementoXML());
    
    TiXmlPrinter printer;
    doc->Accept(&printer);
    return printer.CStr();    
}

void Caja::parseXML (const string& pDescriptor){

    TiXmlDocument doc;
    doc.Parse(pDescriptor.c_str(), 0, TIXML_ENCODING_UTF8);
    this->deElementoXML(doc.FirstChildElement());
}

TiXmlElement* Caja::aElementoXML (){
    
    TiXmlElement * element = new TiXmlElement(CAJA);

    element->SetAttribute("nombre", this->getNombre().c_str());  
    element->LinkEndChild(this->getPosicion()->aElementoXML());
    return element;
}

void Caja::deElementoXML (TiXmlElement* pElemento){

    if (strcmp (pElemento->Value(), CAJA) == 0)
    {
        this->setNombre(pElemento->Attribute("nombre"));
        
        this->setPosicion(new Posicion());
        this->getPosicion()->deElementoXML(pElemento->FirstChildElement());
    }
}

